package com.example.generator;

import com.alibaba.fastjson.JSON;

import java.util.*;

/**
 * 人员基础信息生成器,生成数据已河南省市为原型
 *      涵盖：身份证信息、姓名、性别、民族、邮箱、电话、住址
 *  依赖组件为:{@link JSON}
 *  参考博文:{@see https://blog.csdn.net/qq_38150538/article/details/88797332}
 * @author 刘房
 * @date 2021-12-15 19:06
 */
public class PersonBaseGenerator {
    public final static String base = "abcdefghijklmnopqrstuvwxyz0123456789";
    public final static String firstName="赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任袁柳酆鲍史唐费廉岑薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅皮卞齐康伍余元卜顾孟平黄和穆萧尹姚邵湛汪祁毛禹狄米贝明臧计伏成戴谈宋茅庞熊纪舒屈项祝董梁杜阮蓝闵席季麻强贾路娄危江童颜郭梅盛林刁钟徐邱骆高夏蔡田樊胡凌霍虞万支柯咎管卢莫经房裘缪干解应宗宣丁贲邓郁单杭洪包诸左石崔吉钮龚程嵇邢滑裴陆荣翁荀羊於惠甄魏加封芮羿储靳汲邴糜松井段富巫乌焦巴弓牧隗山谷车侯宓蓬全郗班仰秋仲伊宫宁仇栾暴甘钭厉戎祖武符刘姜詹束龙叶幸司韶郜黎蓟薄印宿白怀蒲台从鄂索咸籍赖卓蔺屠蒙池乔阴郁胥能苍双闻莘党翟谭贡劳逄姬申扶堵冉宰郦雍却璩桑桂濮牛寿通边扈燕冀郏浦尚农温别庄晏柴瞿阎充慕连茹习宦艾鱼容向古易慎戈廖庚终暨居衡步都耿满弘匡国文寇广禄阙东殴殳沃利蔚越夔隆师巩厍聂晁勾敖融冷訾辛阚那简饶空曾毋沙乜养鞠须丰巢关蒯相查后江红游竺权逯盖益桓公万俟司马上官欧阳夏侯诸葛闻人东方赫连皇甫尉迟公羊澹台公冶宗政濮阳淳于仲孙太叔申屠公孙乐正轩辕令狐钟离闾丘长孙慕容鲜于宇文司徒司空亓官司寇仉督子车颛孙端木巫马公西漆雕乐正壤驷公良拓拔夹谷宰父谷粱晋楚阎法汝鄢涂钦段干百里东郭南门呼延归海羊舌微生岳帅缑亢况后有琴梁丘左丘东门西门商牟佘佴伯赏南宫墨哈谯笪年爱阳佟第五言福百家姓续";
    public final static String girl="秀娟英华慧巧美娜静淑惠珠翠雅芝玉萍红娥玲芬芳燕彩春菊兰凤洁梅琳素云莲真环雪荣爱妹霞香月莺媛艳瑞凡佳嘉琼勤珍贞莉桂娣叶璧璐娅琦晶妍茜秋珊莎锦黛青倩婷姣婉娴瑾颖露瑶怡婵雁蓓纨仪荷丹蓉眉君琴蕊薇菁梦岚苑婕馨瑗琰韵融园艺咏卿聪澜纯毓悦昭冰爽琬茗羽希宁欣飘育滢馥筠柔竹霭凝晓欢霄枫芸菲寒伊亚宜可姬舒影荔枝思丽 ";
    public final static String boy="伟刚勇毅俊峰强军平保东文辉力明永健世广志义兴良海山仁波宁贵福生龙元全国胜学祥才发武新利清飞彬富顺信子杰涛昌成康星光天达安岩中茂进林有坚和彪博诚先敬震振壮会思群豪心邦承乐绍功松善厚庆磊民友裕河哲江超浩亮政谦亨奇固之轮翰朗伯宏言若鸣朋斌梁栋维启克伦翔旭鹏泽晨辰士以建家致树炎德行时泰盛雄琛钧冠策腾楠榕风航弘";
    public final static String[] road="重庆大厦,黑龙江路,十梅庵街,遵义路,湘潭街,瑞金广场,仙山街,仙山东路,仙山西大厦,白沙河路,赵红广场,机场路,民航街,长城南路,流亭立交桥,虹桥广场,长城大厦,礼阳路,风岗街,中川路,白塔广场,兴阳路,文阳街,绣城路,河城大厦,锦城广场,崇阳街,华城路,康城街,正阳路,和阳广场,中城路,江城大厦,顺城路,安城街,山城广场,春城街,国城路,泰城街,德阳路,明阳大厦,春阳路,艳阳街,秋阳路,硕阳街,青威高速,瑞阳街,丰海路,双元大厦,惜福镇街道,夏庄街道,古庙工业园,中山街,太平路,广西街,潍县广场,博山大厦,湖南路,济宁街,芝罘路,易州广场,荷泽四路,荷泽二街,荷泽一路,荷泽三大厦,观海二广场,广西支街,观海一路,济宁支街,莒县路,平度广场,明水路,蒙阴大厦,青岛路,湖北街,江宁广场,郯城街,天津路,保定街,安徽路,河北大厦,黄岛路,北京街,莘县路,济南街,宁阳广场,日照街,德县路,新泰大厦,荷泽路,山西广场,沂水路,肥城街,兰山路,四方街,平原广场,泗水大厦,浙江路,曲阜街,寿康路,河南广场,泰安路,大沽街,红山峡支路,西陵峡一大厦,台西纬一广场,台西纬四街,台西纬二路,西陵峡二街,西陵峡三路,台西纬三广场,台西纬五路,明月峡大厦,青铜峡路,台西二街,观音峡广场,瞿塘峡街,团岛二路,团岛一街,台西三路,台西一大厦,郓城南路,团岛三街,刘家峡路,西藏二街,西藏一广场,台西四街,三门峡路,城武支大厦,红山峡路,郓城北广场,龙羊峡路,西陵峡街,台西五路,团岛四街,石村广场,巫峡大厦,四川路,寿张街,嘉祥路,南村广场,范县路,西康街,云南路,巨野大厦,西江广场,鱼台街,单县路,定陶街,滕县路,钜野广场,观城路,汶上大厦,朝城路,滋阳街,邹县广场,濮县街,磁山路,汶水街,西藏路,城武大厦,团岛路,南阳街,广州路,东平街,枣庄广场,贵州街,费县路,南海大厦,登州路,文登广场,信号山支路,延安一街,信号山路,兴安支街,福山支广场,红岛支大厦,莱芜二路,吴县一街,金口三路,金口一广场,伏龙山路,鱼山支街,观象二路,吴县二大厦,莱芜一广场,金口二街,海阳路,龙口街,恒山路,鱼山广场,掖县路,福山大厦,红岛路,常州街,大学广场,龙华街,齐河路,莱阳街,黄县路,张店大厦,祚山路,苏州街,华山路,伏龙街,江苏广场,龙江街,王村路,琴屿大厦,齐东路,京山广场,龙山路,牟平街,延安三路,延吉街,南京广场,东海东大厦,银川西路,海口街,山东路,绍兴广场,芝泉路,东海中街,宁夏路,香港西大厦,隆德广场,扬州街,郧阳路,太平角一街,宁国二支路,太平角二广场,天台东一路,太平角三大厦,漳州路一路,漳州街二街,宁国一支广场,太平角六街,太平角四路,天台东二街,太平角五路,宁国三大厦,澳门三路,江西支街,澳门二路,宁国四街,大尧一广场,咸阳支街,洪泽湖路,吴兴二大厦,澄海三路,天台一广场,新湛二路,三明北街,新湛支路,湛山五街,泰州三广场,湛山四大厦,闽江三路,澳门四街,南海支路,吴兴三广场,三明南路,湛山二街,二轻新村镇,江南大厦,吴兴一广场,珠海二街,嘉峪关路,高邮湖街,湛山三路,澳门六广场,泰州二路,东海一大厦,天台二路,微山湖街,洞庭湖广场,珠海支街,福州南路,澄海二街,泰州四路,香港中大厦,澳门五路,新湛三街,澳门一路,正阳关街,宁武关广场,闽江四街,新湛一路,宁国一大厦,王家麦岛,澳门七广场,泰州一路,泰州六街,大尧二路,青大一街,闽江二广场,闽江一大厦,屏东支路,湛山一街,东海西路,徐家麦岛函谷关广场,大尧三路,晓望支街,秀湛二路,逍遥三大厦,澳门九广场,泰州五街,澄海一路,澳门八街,福州北路,珠海一广场,宁国二路,临淮关大厦,燕儿岛路,紫荆关街,武胜关广场,逍遥一街,秀湛四路,居庸关街,山海关路,鄱阳湖大厦,新湛路,漳州街,仙游路,花莲街,乐清广场,巢湖街,台南路,吴兴大厦,新田路,福清广场,澄海路,莆田街,海游路,镇江街,石岛广场,宜兴大厦,三明路,仰口街,沛县路,漳浦广场,大麦岛,台湾街,天台路,金湖大厦,高雄广场,海江街,岳阳路,善化街,荣成路,澳门广场,武昌路,闽江大厦,台北路,龙岩街,咸阳广场,宁德街,龙泉路,丽水街,海川路,彰化大厦,金田路,泰州街,太湖路,江西街,泰兴广场,青大街,金门路,南通大厦,旌德路,汇泉广场,宁国路,泉州街,如东路,奉化街,鹊山广场,莲岛大厦,华严路,嘉义街,古田路,南平广场,秀湛路,长汀街,湛山路,徐州大厦,丰县广场,汕头街,新竹路,黄海街,安庆路,基隆广场,韶关路,云霄大厦,新安路,仙居街,屏东广场,晓望街,海门路,珠海街,上杭路,永嘉大厦,漳平路,盐城街,新浦路,新昌街,高田广场,市场三街,金乡东路,市场二大厦,上海支路,李村支广场,惠民南路,市场纬街,长安南路,陵县支街,冠县支广场,小港一大厦,市场一路,小港二街,清平路,广东广场,新疆路,博平街,港通路,小港沿,福建广场,高唐街,茌平路,港青街,高密路,阳谷广场,平阴路,夏津大厦,邱县路,渤海街,恩县广场,旅顺街,堂邑路,李村街,即墨路,港华大厦,港环路,馆陶街,普集路,朝阳街,甘肃广场,港夏街,港联路,陵县大厦,上海路,宝山广场,武定路,长清街,长安路,惠民街,武城广场,聊城大厦,海泊路,沧口街,宁波路,胶州广场,莱州路,招远街,冠县路,六码头,金乡广场,禹城街,临清路,东阿街,吴淞路,大港沿,辽宁路,棣纬二大厦,大港纬一路,贮水山支街,无棣纬一广场,大港纬三街,大港纬五路,大港纬四街,大港纬二路,无棣二大厦,吉林支路,大港四街,普集支路,无棣三街,黄台支广场,大港三街,无棣一路,贮水山大厦,泰山支路,大港一广场,无棣四路,大连支街,大港二路,锦州支街,德平广场,高苑大厦,长山路,乐陵街,临邑路,嫩江广场,合江路,大连街,博兴路,蒲台大厦,黄台广场,城阳街,临淄路,安邱街,临朐路,青城广场,商河路,热河大厦,济阳路,承德街,淄川广场,辽北街,阳信路,益都街,松江路,流亭大厦,吉林路,恒台街,包头路,无棣街,铁山广场,锦州街,桓台路,兴安大厦,邹平路,胶东广场,章丘路,丹东街,华阳路,青海街,泰山广场,周村大厦,四平路,台东西七街,台东东二路,台东东七广场,台东西二路,东五街,云门二路,芙蓉山村,延安二广场,云门一街,台东四路,台东一街,台东二路,杭州支广场,内蒙古路,台东七大厦,台东六路,广饶支街,台东八广场,台东三街,四平支路,郭口东街,青海支路,沈阳支大厦,菜市二路,菜市一街,北仲三路,瑞云街,滨县广场,庆祥街,万寿路,大成大厦,芙蓉路,历城广场,大名路,昌平街,平定路,长兴街,浦口广场,诸城大厦,和兴路,德盛街,宁海路,威海广场,东山路,清和街,姜沟路,雒口大厦,松山广场,长春街,昆明路,顺兴街,利津路,阳明广场,人和路,郭口大厦,营口路,昌邑街,孟庄广场,丰盛街,埕口路,丹阳街,汉口路,洮南大厦,桑梓路,沾化街,山口路,沈阳街,南口广场,振兴街,通化路,福寺大厦,峄县路,寿光广场,曹县路,昌乐街,道口路,南九水街,台湛广场,东光大厦,驼峰路,太平山,标山路,云溪广场,太清路".split(",");
    public final static String[] email_suffix="@gmail.com,@yahoo.com,@msn.com,@hotmail.com,@aol.com,@ask.com,@live.com,@qq.com,@0355.net,@163.com,@163.net,@263.net,@3721.net,@yeah.net,@googlemail.com,@126.com,@sina.com,@sohu.com,@yahoo.com.cn".split(",");
    public final static String idCard = "{\"410101\": \"河南省郑州市市辖区\",\"410102\": \"河南省郑州市中原区\",\"410103\": \"河南省郑州市二七区\",\"410104\": \"河南省郑州市管城回族区\",\"410105\": \"河南省郑州市金水区\",\"410106\": \"河南省郑州市上街区\",\"410108\": \"河南省郑州市邙山区\",\"410122\": \"河南省郑州市中牟县\",\"410181\": \"河南省郑州市巩义市\",\"410182\": \"河南省郑州市荥阳市\",\"410183\": \"河南省郑州市新密市\",\"410184\": \"河南省郑州市新郑市\",\"410185\": \"河南省郑州市登封市\",\"410201\": \"河南省开封市市辖区\",\"410202\": \"河南省开封市龙亭区\",\"410203\": \"河南省开封市顺河回族区\",\"410204\": \"河南省开封市鼓楼区\",\"410205\": \"河南省开封市南关区\",\"410211\": \"河南省开封市郊区\",\"410221\": \"河南省开封市杞县\",\"410222\": \"河南省开封市通许县\",\"410223\": \"河南省开封市尉氏县\",\"410224\": \"河南省开封市开封县\",\"410225\": \"河南省开封市兰考县\",\"410301\": \"河南省洛阳市市辖区\",\"410302\": \"河南省洛阳市老城区\",\"410303\": \"河南省洛阳市西工区\",\"410304\": \"河南省洛阳市廛河回族区\",\"410305\": \"河南省洛阳市涧西区\",\"410306\": \"河南省洛阳市吉利区\",\"410307\": \"河南省洛阳市洛龙区\",\"410322\": \"河南省洛阳市孟津县\",\"410323\": \"河南省洛阳市新安县\",\"410324\": \"河南省洛阳市栾川县\",\"410325\": \"河南省洛阳市嵩县\",\"410326\": \"河南省洛阳市汝阳县\",\"410327\": \"河南省洛阳市宜阳县\",\"410328\": \"河南省洛阳市洛宁县\",\"410329\": \"河南省洛阳市伊川县\",\"410381\": \"河南省洛阳市偃师市\",\"410401\": \"河南省平顶山市市辖区\",\"410402\": \"河南省平顶山市新华区\",\"410403\": \"河南省平顶山市卫东区\",\"410404\": \"河南省平顶山市石龙区\",\"410411\": \"河南省平顶山市湛河区\",\"410421\": \"河南省平顶山市宝丰县\",\"410422\": \"河南省平顶山市叶县\",\"410423\": \"河南省平顶山市鲁山县\",\"410425\": \"河南省平顶山市郏县\",\"410481\": \"河南省平顶山市舞钢市\",\"410482\": \"河南省平顶山市汝州市\",\"410501\": \"河南省安阳市市辖区\",\"410502\": \"河南省安阳市文峰区\",\"410503\": \"河南省安阳市北关区\",\"410505\": \"河南省安阳市殷都区\",\"410506\": \"河南省安阳市龙安区\",\"410522\": \"河南省安阳市安阳县\",\"410523\": \"河南省安阳市汤阴县\",\"410526\": \"河南省安阳市滑县\",\"410527\": \"河南省安阳市内黄县\",\"410581\": \"河南省安阳市林州市\",\"410600\": \"河南省安阳市鹤壁市\",\"410601\": \"河南省安阳市市辖区\",\"410602\": \"河南省安阳市鹤山区\",\"410603\": \"河南省安阳市山城区\",\"410611\": \"河南省安阳市淇滨区\",\"410621\": \"河南省安阳市浚县\",\"410622\": \"河南省安阳市淇县\",\"410701\": \"河南省新乡市市辖区\",\"410702\": \"河南省新乡市红旗区\",\"410703\": \"河南省新乡市卫滨区\",\"410704\": \"河南省新乡市凤泉区\",\"410711\": \"河南省新乡市牧野区\",\"410721\": \"河南省新乡市新乡县\",\"410724\": \"河南省新乡市获嘉县\",\"410725\": \"河南省新乡市原阳县\",\"410726\": \"河南省新乡市延津县\",\"410727\": \"河南省新乡市封丘县\",\"410728\": \"河南省新乡市长垣县\",\"410781\": \"河南省新乡市卫辉市\",\"410782\": \"河南省新乡市辉县市\",\"410801\": \"河南省焦作市市辖区\",\"410802\": \"河南省焦作市解放区\",\"410803\": \"河南省焦作市中站区\",\"410804\": \"河南省焦作市马村区\",\"410811\": \"河南省焦作市山阳区\",\"410821\": \"河南省焦作市修武县\",\"410822\": \"河南省焦作市博爱县\",\"410823\": \"河南省焦作市武陟县\",\"410825\": \"河南省焦作市温县\",\"410881\": \"河南省焦作市济源市\",\"410882\": \"河南省焦作市沁阳市\",\"410883\": \"河南省焦作市孟州市\",\"410901\": \"河南省濮阳市市辖区\",\"410902\": \"河南省濮阳市华龙区\",\"410922\": \"河南省濮阳市清丰县\",\"410923\": \"河南省濮阳市南乐县\",\"410926\": \"河南省濮阳市范县\",\"410927\": \"河南省濮阳市台前县\",\"410928\": \"河南省濮阳市濮阳县\",\"411001\": \"河南省许昌市市辖区\",\"411002\": \"河南省许昌市魏都区\",\"411023\": \"河南省许昌市许昌县\",\"411024\": \"河南省许昌市鄢陵县\",\"411025\": \"河南省许昌市襄城县\",\"411081\": \"河南省许昌市禹州市\",\"411082\": \"河南省许昌市长葛市\",\"411100\": \"河南省许昌市漯河市\",\"411101\": \"河南省许昌市市辖区\",\"411102\": \"河南省许昌市源汇区\",\"411121\": \"河南省许昌市舞阳县\",\"411122\": \"河南省许昌市临颍县\",\"411123\": \"河南省许昌市郾城县\",\"411200\": \"河南省三门峡市\",\"411201\": \"河南省三门峡市市辖区\",\"411202\": \"河南省三门峡市湖滨区\",\"411221\": \"河南省三门峡市渑池县\",\"411222\": \"河南省三门峡市陕县\",\"411224\": \"河南省三门峡市卢氏县\",\"411281\": \"河南省三门峡市义马市\",\"411282\": \"河南省三门峡市灵宝市\",\"411301\": \"河南省南阳市市辖区\",\"411302\": \"河南省南阳市宛城区\",\"411303\": \"河南省南阳市卧龙区\",\"411321\": \"河南省南阳市南召县\",\"411322\": \"河南省南阳市方城县\",\"411323\": \"河南省南阳市西峡县\",\"411324\": \"河南省南阳市镇平县\",\"411325\": \"河南省南阳市内乡县\",\"411326\": \"河南省南阳市淅川县\",\"411327\": \"河南省南阳市社旗县\",\"411328\": \"河南省南阳市唐河县\",\"411329\": \"河南省南阳市新野县\",\"411330\": \"河南省南阳市桐柏县\",\"411381\": \"河南省南阳市邓州市\",\"411401\": \"河南省商丘市市辖区\",\"411402\": \"河南省商丘市梁园区\",\"411403\": \"河南省商丘市睢阳区\",\"411421\": \"河南省商丘市民权县\",\"411422\": \"河南省商丘市睢县\",\"411423\": \"河南省商丘市宁陵县\",\"411424\": \"河南省商丘市柘城县\",\"411425\": \"河南省商丘市虞城县\",\"411426\": \"河南省商丘市夏邑县\",\"411481\": \"河南省永城市永城市\",\"411501\": \"河南省信阳市市辖区\",\"411502\": \"河南省信阳市师河区\",\"411503\": \"河南省信阳市平桥区\",\"411521\": \"河南省信阳市罗山县\",\"411522\": \"河南省信阳市光山县\",\"411523\": \"河南省信阳市新县\",\"411524\": \"河南省信阳市商城县\",\"411525\": \"河南省信阳市固始县\",\"411526\": \"河南省信阳市潢川县\",\"411527\": \"河南省信阳市淮滨县\",\"411528\": \"河南省信阳市息县\",\"411601\": \"河南省周口市市辖区\",\"411602\": \"河南省周口市川汇区\",\"411621\": \"河南省周口市扶沟县\",\"411622\": \"河南省周口市西华县\",\"411623\": \"河南省周口市商水县\",\"411624\": \"河南省周口市沈丘县\",\"411625\": \"河南省周口市郸城县\",\"411626\": \"河南省周口市淮阳县\",\"411627\": \"河南省周口市太康县\",\"411628\": \"河南省周口市鹿邑县\",\"411681\": \"河南省周口市项城市\",\"411701\": \"河南省驻马店市市辖区\",\"411702\": \"河南省驻马店市驿城区\",\"411721\": \"河南省驻马店市西平县\",\"411722\": \"河南省驻马店市上蔡县\",\"411723\": \"河南省驻马店市平舆县\",\"411724\": \"河南省驻马店市正阳县\",\"411725\": \"河南省驻马店市确山县\",\"411726\": \"河南省驻马店市泌阳县\",\"411727\": \"河南省驻马店市汝南县\",\"411728\": \"河南省驻马店市遂平县\",\"411729\": \"河南省驻马店市新蔡县\"}";
    public final static String nation = "[{\"category\":\"独龙族\",\"weight\":\"10\"},{\"category\":\"阿昌族\",\"weight\":\"10\"},{\"category\":\"满族\",\"weight\":\"10\"},{\"category\":\"东乡族\",\"weight\":\"10\"},{\"category\":\"傣族\",\"weight\":\"10\"},{\"category\":\"高山族\",\"weight\":\"10\"},{\"category\":\"朝鲜族\",\"weight\":\"10\"},{\"category\":\"珞巴族\",\"weight\":\"10\"},{\"category\":\"鄂伦春族\",\"weight\":\"10\"},{\"category\":\"侗族\",\"weight\":\"10\"},{\"category\":\"哈尼族\",\"weight\":\"10\"},{\"category\":\"畲族\",\"weight\":\"10\"},{\"category\":\"水族\",\"weight\":\"10\"},{\"category\":\"瑶族\",\"weight\":\"10\"},{\"category\":\"彝族\",\"weight\":\"10\"},{\"category\":\"鄂温克族\",\"weight\":\"10\"},{\"category\":\"土族\",\"weight\":\"10\"},{\"category\":\"乌孜别克族\",\"weight\":\"10\"},{\"category\":\"普米族\",\"weight\":\"10\"},{\"category\":\"裕固族\",\"weight\":\"10\"},{\"category\":\"壮族\",\"weight\":\"10\"},{\"category\":\"京族\",\"weight\":\"10\"},{\"category\":\"汉族\",\"weight\":\"1500\"},{\"category\":\"保安族\",\"weight\":\"10\"},{\"category\":\"塔吉克族\",\"weight\":\"10\"},{\"category\":\"布朗族\",\"weight\":\"10\"},{\"category\":\"仡佬族\",\"weight\":\"10\"},{\"category\":\"蒙古族\",\"weight\":\"10\"},{\"category\":\"回族\",\"weight\":\"10\"},{\"category\":\"仫佬族\",\"weight\":\"10\"},{\"category\":\"撒拉族\",\"weight\":\"10\"},{\"category\":\"哈萨克族\",\"weight\":\"10\"},{\"category\":\"景颇族\",\"weight\":\"10\"},{\"category\":\"塔塔尔族\",\"weight\":\"10\"},{\"category\":\"苗族\",\"weight\":\"10\"},{\"category\":\"羌族\",\"weight\":\"10\"},{\"category\":\"纳西族\",\"weight\":\"10\"},{\"category\":\"黎族\",\"weight\":\"10\"},{\"category\":\"基诺族\",\"weight\":\"10\"},{\"category\":\"赫哲族\",\"weight\":\"10\"},{\"category\":\"锡伯族\",\"weight\":\"10\"},{\"category\":\"佤族\",\"weight\":\"10\"},{\"category\":\"土家族\",\"weight\":\"10\"},{\"category\":\"毛南族\",\"weight\":\"10\"},{\"category\":\"柯尔克孜族\",\"weight\":\"10\"},{\"category\":\"藏族\",\"weight\":\"10\"},{\"category\":\"德昂族\",\"weight\":\"10\"},{\"category\":\"怒族\",\"weight\":\"10\"},{\"category\":\"维吾尔族\",\"weight\":\"10\"},{\"category\":\"白族\",\"weight\":\"10\"},{\"category\":\"傈僳族\",\"weight\":\"10\"},{\"category\":\"拉祜族\",\"weight\":\"10\"},{\"category\":\"门巴族\",\"weight\":\"10\"},{\"category\":\"达斡尔族\",\"weight\":\"10\"},{\"category\":\"俄罗斯族\",\"weight\":\"10\"},{\"category\":\"布依族\",\"weight\":\"10\"}]";


    private static Random random = new Random();

    public static int getNum(int start,int end) {
        return (int)(Math.random()*(end-start+1)+start);
    }

    /**
     * 返回Email
     * @param lMin 最小长度
     * @param lMax 最大长度
     * @return
     */
    public static String getEmail(int lMin,int lMax) {
        int length=getNum(lMin,lMax);
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < length; i++) {
            int number = (int)(Math.random()*base.length());
            sb.append(base.charAt(number));
        }
        sb.append(email_suffix[(int)(Math.random()*email_suffix.length)]);
        return sb.toString();
    }

    /**
     * 返回手机号码
     */
    private static String[] telFirst="134,135,136,137,138,139,150,151,152,157,158,159,130,131,132,155,156,133,153".split(",");
    private static String getTel() {
        int index=getNum(0,telFirst.length-1);
        String first=telFirst[index];
        String second=String.valueOf(getNum(1,888)+10000).substring(1);
        String thrid=String.valueOf(getNum(1,9100)+10000).substring(1);
        return first+second+thrid;
    }

    /**
     * 返回中文姓名
     */
    private static String name_sex = "";
    private static String getChineseName() {
        int index=getNum(0, firstName.length()-1);
        String first=firstName.substring(index, index+1);
        int sex=getNum(0,1);
        String str=boy;
        int length=boy.length();
        if(sex==0){
            str=girl;
            length=girl.length();
            name_sex = "女";
        }else {
            name_sex="男";
        }
        index=getNum(0,length-1);
        String second=str.substring(index, index+1);
        int hasThird=getNum(0,1);
        String third="";
        if(hasThird==1){
            index=getNum(0,length-1);
            third=str.substring(index, index+1);
        }
        return first+second+third;
    }

    /**
     * 返回地址
     * @return
     */
    private static String getRoad() {
        int index=getNum(0,road.length-1);
        String first=road[index];
        String second=String.valueOf(getNum(11,150))+"号";
        String third="-"+getNum(1,20)+"-"+getNum(1,10);
        Map<String, String> o1 = JSON.parseObject(idCard, HashMap.class);
        List objects = Arrays.asList(o1.entrySet().toArray());
        String prex = objects.get(new Random().nextInt(178)).toString().split("=")[1];
        return prex+first+second+third;
    }


    /**
     * 生成身份证数据
     * @param random    生成器
     * @param sex   性别
     * @return 身份证
     */
    public static String getIdCard(Random random, String sex){
        Map<String, String> o1 = JSON.parseObject(idCard, HashMap.class);
        List objects = Arrays.asList(o1.entrySet().toArray());
        String prex = objects.get(random.nextInt(178)).toString().split("=")[0];
        /**出生年份*/
        int year = random.nextInt(2022 - 1910 + 1) + 1910;
        /**出生月份*/
        int month = random.nextInt(12 - 1 + 1) + 1;
        /**出生天*/
        String monthStr = month > 9 ? Integer.toString(month) : "0" + month;
        int day = random.nextInt(30 - 1 + 1) + 1;
        String dayStr = day > 9 ? Integer.toString(day) : "0" + day;
        /**身份证后四位*/
        int cardNum = random.nextInt(999 - 100 + 1) + 100;
        String number;
        if(sex.equals("男")){
            while(true) {
                int n = random.nextInt(9 - 1 + 1) + 1;
                if( n % 2 == 0) {
                    number = Integer.toString(cardNum) + Integer.toString(n);
                    break;
                }
            }
        }else {
            while(true) {
                int n = random.nextInt(9 - 1 + 1) + 1;
                if( n % 2 != 0) {
                    number = Integer.toString(cardNum) + Integer.toString(n);
                    break;
                }
            }
        }
        return prex + year + monthStr + dayStr + number;
    }


    /**
     * 返回民族
     * @return
     */
    public static String getNation(){
        List<WeightCategory> categorys = JSON.parseArray(nation,WeightCategory.class);
        Integer weightSum = 0;
        for (WeightCategory wc : categorys) {
            weightSum += wc.getWeight();
        }

        if (weightSum <= 0) {
            System.err.println("Error: weightSum=" + weightSum.toString());
            return "汉族";
        }
        Integer n = random.nextInt(weightSum); // n in [0, weightSum)
        Integer m = 0;
        for (WeightCategory wc : categorys) {
            if (m <= n && n < m + wc.getWeight()) {
                System.out.println("This Random Category is " + wc.getCategory());
                return wc.getCategory();
            }
            m += wc.getWeight();
        }
        //默认值汉族,人口比例居多
        return "汉族";
    }

    /**
     * 数据封装
     * @return
     */
    public static Map getAddress() {
        Map map=new HashMap();
        /**生成身份证*/
        map.put("idCard", getIdCard(new Random(),name_sex));
        /**生成姓名*/
        map.put("name", getChineseName());
        /**获取民族*/
        map.put("nation", getNation());
        /**生成性别*/
        map.put("sex", name_sex);
        /**生成地址*/
        map.put("address", getRoad());
        /**生成电话*/
        map.put("tel", getTel());
        /**生成邮箱*/
        map.put("email", getEmail(6,9));
        return map;
    }


    public static void main(String[] args) {
        for(int i=0;i<10000;i++){
            System.out.println(getAddress());
//        System.out.println(getNation());
        }



    }
}
